<template>
    <div class="bluetooth">
        <van-nav-bar safe-area-inset-top placeholder title="蓝牙" left-arrow fixed @click-left="onClickLeft" right-text="重新扫描" @click-right="scans" />
        <div class="tips">* 请确保您的手机已经开启蓝牙功能，并且此功能可以正常使用！</div>
        <!-- <div class="titleBox">蓝牙列表：</div> -->
        <van-divider content-position="left" :style="{borderColor: '#DADADA'}">蓝牙列表</van-divider>
        <van-cell-group style="text-align:left;margin-bottom:10px"  v-for="(data,i) in lists" :key="i">
            <van-cell :title="data.name">
                <div>
                    <van-button round type="primary" size="small" @click="connect(data.id)">连接</van-button>
                </div>
            </van-cell>
            <van-cell title="点击发送数据" icon="back-top" @click="setShow=true" v-if="show" />
        </van-cell-group>
        <div class="content">数据内容：<p v-for="(data,i) in toothDatas" :key="i">{{data}}</p></div>
        <van-dialog @confirm="writeData" v-model="setShow" title="请输入待发送数据" :confirmButtonText="$t('OK')" :cancelButtonText="$t('Cancel')" width="280" show-cancel-button>
            <van-field placeholder="数据" clearable v-model="pwd" type="text" />
        </van-dialog>
    </div>
</template>

<script>
import { Toast } from 'vant';
export default {
    data() {
        return {
            toothDatas:[],
            Unit8Arrs:[],
            lists:[],
            setShow:false,
            pwd:'',
            device_id:'',
            show:false
        };
    },
    methods: {
        onClickLeft(){
            this.$router.push({path:'/localin'});
        },
        //扫描去重
        uniqueArray(array, key){
            var result = [array[0]];
            for(var i = 1; i < array.length; i++){
            var item = array[i];
            var repeat = false;
            for (var j = 0; j < result.length; j++) {
                if (item[key] == result[j][key]) {
                repeat = true;
                break;
                }
            }
            if (!repeat) {
                result.push(item);
            }
            }
            return result;
        },
        stringToBytes(string) {
            var data = new Uint8Array(string.length/2);
            if(string.length%2==0 ){
                var index=0;
                for(var i =0;i<string.length;i+=2){
                    var byteChar = string.slice(i,i+2);
                    var bt = parseInt(byteChar,16);
                    data[index++]=bt;
                }
            }else{
                alert("输入格式错误");
            }
             return data.buffer;
        },
        bytesToString(buffer) {
            //test
            // let arr=[{"0":170,"1":85,"2":151,"3":1,"4":144,"5":1,"6":1,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0},{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":17,"152":17,"153":75,"154":2}];
            let strArr=[];
            for(let i=0;i<buffer.length;i++){
                for(let key in buffer[i]){
                    strArr.push(buffer[i][key].toString(16));
                }
            }
            return strArr;
        },
        //扫描蓝牙
        start(){
            this.comm.loadingShow();
            let arr=[];
            return new Promise((resolve)=>{
                ble.startScan([],(device)=>{
                    if(device.name==undefined||device.name==null){
                        device.name='***'
                    }
                    arr.push({'name':device.name,'id':device.id});
                }, (err)=>{
                    this.comm.toastHide();
                });
                //关闭扫描
                setTimeout(() => {
                    this.comm.toastHide();
                    ble.stopScan(()=>{
                        resolve(arr);
                    }, ()=>{
                        this.comm.toastHide();
                        console.log('error');
                    });
                }, 5000);
            });
        },
        scans(){
            this.start().then(datas=>{
                this.lists=this.uniqueArray(datas,'name');
            });
        },
        //连接蓝牙
        connect(device_id){
            ble.connect(device_id, (datas)=>{
                //获取characteristicUUID
                let characters=datas.characteristics;
                // for(let i=0;i<characters.length;i++){
                //     if(characters[i].properties[0]=="writeWithoutResponse" && characters[i].service=='2B11'){
                //         characteristicId=characters[i].characteristic;
                //         service_uuid=characters[i].service;
                //         break;
                //     }
                // }
                alert('连接成功!');
                this.device_id=device_id;
                this.show=true;
                //开启通知
                let characteristicId='2B10';
                let service_uuid='2B00';
                ble.startNotification(device_id, service_uuid, characteristicId, (datas)=>{
                    let buffer=new Uint8Array(datas);
                    this.Unit8Arrs.push(buffer);
                    this.toothDatas[0]=JSON.stringify(this.Unit8Arrs);
                    this.toothDatas[1]=this.bytesToString(this.Unit8Arrs);
                }, (err)=>{
                    alert('read error:'+JSON.stringify(err));
                });
            }, (err)=>{
                Toast.fail('蓝牙连接失败');
                this.show=false;
            });
        },
        //写
        writeData(){
            this.toothDatas=[];
            this.Unit8Arrs=[];
           let characteristicId='2B11';
           let service_uuid='2B00';
           let setDatas=this.stringToBytes(this.pwd);
            ble.writeWithoutResponse(this.device_id, service_uuid, characteristicId,setDatas, (data)=>{
                alert('success!');
            }, (err)=>{
                alert('error:'+JSON.stringify(err));
            });
        }
    },
    mounted() {
    
  }
};
</script>

<style  lang="less" scoped>
.bluetooth{
    .tips{
        width: 100%;
        box-sizing: border-box;
        padding: 10px 10px 0 10px;
        font-size: 14px;
        color: #ff7a2c;
        text-align: left;
    }
    .titleBox{
        width: 100%;
        padding: 20px 10px;
        text-align: left;
        color: #777;
        box-sizing: border-box;
        font-size: 14px;
    }
  .content{
      box-sizing: border-box;
      text-align: left;
      font-size: 14px;
      color: #fb6002;
      width: 100%;
      padding: 10px;
      word-wrap:break-word;
  }
}
</style>
